﻿#define _CRT_SECURE_NO_WARNINGS

//#include<iostream>
//using namespace std;
////缺省参数
//void func(int a = 10)
//{
//	cout << "a = " << a << endl << endl;
//}
//int main()
//{
//	func();//没有实参，使用缺省参数10
//	func(100);//有实参，使用实参100
//	return 0;
//}
//
//// 全缺省
//void Func1(int a = 1, int b = 2, int c = 3)
//{
//	cout << "a = " << a << endl;
//	cout << "b = " << b << endl;
//	cout << "c = " << c << endl << endl;
//}
//
////半缺省（部分缺省）
//void Func2(int a, int b = 20, int c = 30)
//{
//	cout << "a = " << a << endl;
//	cout << "b = " << b << endl;
//	cout << "c = " << c << endl << endl;
//}
//int main()
//{
//	// 全缺省调用
//	Func1();//不传参，为默认缺省值
//	Func1(11);//传一个参，第一个为传的实参值，其他的为默认缺省值
//	Func1(11,22);//传两个参，前面两个为传的实参值，其他的为默认缺省值
//	Func1(11,22,33);//传三个参，都为传的实参值
//
//	// 半缺省调用
//	//Func2两个参数是缺省参数，至少传一个参数
//	Func2(100);//传一个参，第一个为传的实参值，其他的为默认缺省值
//	Func2(100, 200);//传两个参，前面两个为传的实参值，其他的为默认缺省值
//	Func2(100, 200, 300);//传三个参，都为传的实参值
//	return 0;
//}


//
//#include<iostream>
//using namespace std;
////半缺省
////void Func(int a = 10,int b,int c = 30)//err
//////C++规定半缺省参数必须从右往左依次连续缺省，不能间隔跳跃给缺省值
////{
////	cout << "a = " << a << endl;
////	cout << "b = " << a << endl;
////	cout << "c = " << a << endl << endl;
////}
//
//
//void Func(int a = 10, int b = 20, int c = 30)
//{
//	cout << "a = " << a << endl;
//	cout << "b = " << b << endl;
//	cout << "c = " << c << endl << endl;
//}
//int main()
//{
//	Func();
//	Func(1, 2);
//	//Func(1, , 3);//err
//	//想直接给第一个和第三个传参是找不到的
//	//带缺省参数的函数调用，C++规定必须从左到右依次给实参，不能跳跃给实参。 
//	return 0;
//}


//#include<iostream>
//using namespace std;
//
////函数声明
//void Func(int a = 10, int b = 20, int c = 30);
//int main()
//{
//	Func(1, 2);
//	return 0;
//}
////函数定义
////err
////函数声明和定义分离时，缺省参数不能在函数声明和定义中同时出现，规定必须函数声明给缺省值
//void Func(int a = 10, int b = 20, int c = 30)
//{
//	cout << "a = " << a << endl;
//	cout << "b = " << b << endl;
//	cout << "c = " << c << endl << endl;
//}


//#include<iostream>
//using namespace std;
//
////函数声明
////void Func(int a = 10, int b = 20, int c = 30);
//void Func(int a, int b, int c);
//int main()
//{
//	Func(1, 2);
//	return 0;
//}
////函数定义
////规定必须函数声明给缺省值
////err
//void Func(int a = 10, int b = 20, int c = 30)
//{
//	cout << "a = " << a << endl;
//	cout << "b = " << b << endl;
//	cout << "c = " << c << endl << endl;
//}


//#include<iostream>
//using namespace std;
//
////函数声明
////函数声明给缺省值
//void Func(int a = 10, int b = 20, int c = 30);
//int main()
//{
//	Func(1, 2);
//	return 0;
//}
////函数定义
//void Func(int a, int b, int c)
//{
//	cout << "a = " << a << endl;
//	cout << "b = " << b << endl;
//	cout << "c = " << c << endl << endl;
//}


//
//#include<iostream>
//using namespace std;
//
////1.形参参数类型不同
//int Add(int a, int b)
//{
//	cout << "int Add(int a, int b)" << endl;
//	return a + b;
//}
//
//double Add(double a, double b)
//{
//	cout << "double Add(double a, double b)" << endl;
//	return a + b;
//}
////2.形参参数个数不同
//void func(int a)
//{
//	cout << "void func(int a)" << endl;
//}
//
//void func(int a, int b)
//{
//	cout << "void func(int a, int b)" << endl;
//}
//int main()
//{
//	//形参参数类型不同测试
//	Add(1, 2);
//	Add(1.1, 2.2);
//	//形参参数个数不同测试
//	func(1);
//	func(1, 2);
//	return 0;
//}
//
//#include<iostream>
//using namespace std;
//
//void f()
//{
//	cout << "f()" << endl;
//}
//void f(int a = 10)
//{
//	cout << "f(int a = 10)" << endl;
//}
//int main()
//{
//	f(100);
//	return 0;
//}


//#include<iostream>
//using namespace std;
//int main()
//{
//	int a = 1;
//	// 引用：b和c是a的别名
//	int& b = a;
//	int& c = a;
//	++c;
//	// 同时也可以给别名b取别名，d相当于还是a的别名
//	int& d = b;
//	++d;
//	cout << "a = " << a << endl;
//	cout << "b = " << b << endl;
//	cout << "c = " << c << endl;
//	cout << "d = " << d << endl;
//	// 取地址我们看到是⼀样的
//	//已存在变量和它引用的变量共用同一块内存空间
//	cout << &a << endl;
//	cout << &b << endl;
//	cout << &c << endl;
//	cout << &d << endl;
//	return 0;
//}


#include<iostream>
using namespace std;
int main()
{
	int a = 10;
	//int& ra;
	// 编译报错：“ra”: 必须初始化引用
	//正确引用
	int& b = a;
	//a,b共用一块内存空间
	int c = 20;
	b = c;
	// 不是让b引用c，因为C++引用不能改变指向
	// 这里是正常的赋值
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl;
	cout << &a << endl;
	cout << &b << endl;
	cout << &c << endl;
	return 0;
}